package com.dycong.common.reflect.aop.annotation.Before;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * Created by dycong on 2016/12/12.
 */
@Aspect
@Order(500)
@Component
public class GreetingAspectBefore {

    /**
     * todo 切面优先级：也就是切面运行的先后比如当我们一个系统涉及权限，日志，验证。。等等各种功能我们一般是需要先验证有没有这个权限，然后再打印日志，
     * todo 但是系统并不知道怎么去识别使用哪个切面所以我们就要硬性的规定一下优先使用哪个切面（使用@order注解既可以了）
     * todo ----->@Order注解放在切面类类名上（@Target({ElementType.TYPE..}）@Order(int)值越小优先级越高(但是在@Around里在执行Before时已经执行了after()这时对after的期望失效)
     */
    @Before("@annotation(Spring.aop.annotation.Before.Before)")
    public Object before(JoinPoint pjp) throws Throwable {
        doSomethingBefore();
        //Object[] objects=new Object[]{"girl","A3"};
        //Object result = pjp.proceed(objects);
        Object result = pjp.getArgs();
        return result;
    }

    private void doSomethingBefore() {
        System.out.println("do somethings Before ORDER");
    }
}
